<?php

namespace common\helpers;

use common\factory\DingtalkFactory;

/**
 * 日期数据格式返回
 *
 * Class DingHelper
 * @package common\helpers
 *
 */
class DingHelper
{
    /**
     * 机器人发送消息
     * 接口文档 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq/XAzBI
     *
     * @param string $accessToken 钉钉access_token
     * @param string|null $secret 密钥
     * @param array $params [
     *      'msgtype' => '',// 消息类型【text,link,markdown】
     *      'text_data' => [// 数据【msgtype=text必填】
     *          'content' => '',// 内容【必填】
     *      ],
     *      'link_data' => [// 数据【msgtype=link必填】
     *          'title' => ,// 消息标题【必填】
     *          'text' => ,// 消息内容。如果太长只会部分展示【必填】
     *          'messageUrl' => ,// 点击消息跳转的URL【必填】
     *          'picUrl' => ,// 图片URL【选填】
     *      ],
     *      'markdown_data' => [// 数据【msgtype=markdown必填】
     *          'title' => '',// 首屏会话透出的展示内容【必填】
     *          'text' => '',// markdown格式的消息【必填】
     *          'data_arr' => [],// 数组参数【此参数值存在则text失效, 调用默认模板】
     *      ],
     *      'at' => [// @用户【msgtype=text,markdown选填】
     *          'atMobiles' => [],// 指定人员手机号【数组，msgtype=text 被@人的手机号（在content里添加@人的手机号）;msgtype=markdown 被@人的手机号（在text内容里要有@手机号）】
     *          'isAtAll' => false,// 是否@所有人【true则atMobiles失效】
     *      ],
     *
     * ]
     * @return array ['errcode' => 0, 'errmsg' => 'ok']
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public static function sendMessage(string $accessToken = '', ?string $secret = null, array $params = [])
    {
        $data = [
            'msgtype' => $params['msgtype'] ?? 'text',
        ];
        switch ($data['msgtype']) {
            case 'text':
                $data['text'] = [
                    'content' => $params['text_data']['content'] ?? '',
                ];
                if (isset($params['at'])) {
                    $data['at'] = [
                        'atMobiles' => $params['at']['atMobiles'] ?? [],
                        'isAtAll' => $params['at']['isAtAll'] ?? false,
                    ];
                }
                break;
            case 'link':
                $data['link'] = [
                    'title' => $params['link_data']['title'] ?? '',
                    'text' => $params['link_data']['text'] ?? '',
                    'picUrl' => $params['link_data']['picUrl'] ?? '',
                    'messageUrl' => $params['link_data']['messageUrl'] ?? '',
                ];
                break;
            case 'markdown':
                // 标题【吐槽：title参数无效还必填】
                $text = "### {$params['markdown_data']['title']} ###".PHP_EOL;
                $textArr = $params['markdown_data']['data_arr'] ?? [];
                if ($textArr && is_array($textArr)) {// 默认模板
                    foreach($textArr as $k => $v) {
                        $text .= "> - {$k}：{$v}".PHP_EOL;
                    }
                } else {
                    $text = $params['markdown_data']['text'] ?? '';
                }

                $data['markdown'] = [
                    'title' => $params['markdown_data']['title'] ?? '',
                    'text' => $text,
                ];
                if (isset($params['at'])) {
                    $data['at'] = [
                        'atMobiles' => $params['at']['atMobiles'] ?? [],
                        'isAtAll' => $params['at']['isAtAll'] ?? false,
                    ];
                }
                break;
            default:
                break;
        }

        // errcode=0成功
        $robot = DingtalkFactory::createRobot($accessToken, $secret);
        return $robot->send($data);
    }
}
